#include "pch.h"
#include "CoreDataProcessor.h"




CoreDataProcessor::CoreDataProcessor()
	: m_rx( "(http?://)"                             // Protocol //< http[s] could be used
			"(([0-9]{1,3}\\.){3}[0-9]{1,3}"          // Ip address
			"|"                                      // OR
			"([0-9a-z_!~*'()-]+\\.)*"                // Teriary domain    (www)
			"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\."  // Secondary domain  (deviantart)
			"[a-z]{2,6})"                            // primary domain    (com)
			"(:[0-9]{1,4})?"                         // port number
			"((/?)|"                                 // possible filename
			"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)" ) // complete filename
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

CoreDataProcessor::~CoreDataProcessor()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




QString CoreDataProcessor::name() const
{
	return "CoreDataProcessor";
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString CoreDataProcessor::version() const
{
	return "1.0";
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString CoreDataProcessor::description() const
{
	return "Core Processor that searches new urls";
}
///////////////////////////////////////////////////////////////////////////////////////////////////




void CoreDataProcessor::attach(UrlWriter::Ptr urlProvider)
{
	if(enabled())
		BOOSTEXT_THROW(boostext::programming_error("Can't attach provider to a running processor"));

	m_urlProvider = urlProvider;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void CoreDataProcessor::process(const Reply &reply)
{
	int offset = 0;
	while((offset = m_rx.indexIn(reply.content(), offset)) != -1 && m_rx.numCaptures() >= 2 )
	{
		offset += m_rx.matchedLength();

		QString strUrl = m_rx.cap( 0 );
		QUrl    url    = strUrl;

		m_urlProvider->insert(url);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
